/*
对于任意的真分数 N/M （ 0 < N < M ），均可以求出对应的小数。如果采用链表存储各位小数，对于循环节采用循环链表表示，则所有分数均可以表示为如下链表形式。

![](图片2)

输入： N M

输出： 整个循环节

要求：
编写一个尽可能高效的查找循环节起始点的函数： NODE * find( NODE * head, int * n ) 。函数的返回值为循环节的起点（即图中的指针p），n为循环节的长度。

说明：提交程序时请同时提交将分数转换为小数的函数 change( int n, int m, NODE * head ) 。
*/

/*
测试用例1:
输入：
1 3↵
输出：
ring=1↵
3↵

测试用例2:
输入：
79 80↵
输出：
ring=0↵
NULL↵

测试用例3:
输入：
2011 2012↵
输出：
ring=502↵
9502982107355864811133200795228628230616302186878727634194831013916500994035785288270377733598409542743538767395626242544731610337972166998011928429423459244532803180914512922465208747514910536779324055666003976143141153081510934393638170974155069582504970178926441351888667992047713717693836978131212723658051689860834990059642147117296222664015904572564612326043737574552683896620278330019880715705765407554671968190854870775347912524850894632206759443339960238568588469184890656063618290258449304174↵

测试用例4:
输入：
11 13↵
输出：
ring=6↵
846153↵
*/
#include <stdio.h>  
#include <stdlib.h>  

typedef struct node  
{   int         data;  
	struct node * next;  
} NODE;  

NODE * find( NODE * , int * );  
void outputring( NODE * );  
void change( int , int , NODE * );  

void outputring( NODE * pring )  
{   NODE * p;  
	p = pring;  
	if ( p == NULL )  
		printf("NULL");  
	else  
		do  
			{   printf("%d", p->data);  
				p = p->next;  
			} while ( p != pring );  
	printf("\n");  
	return;  
	
}  

int main()  
{   int n, m;  
	NODE * head, * pring;  
	
	scanf("%d%d", &n, &m);  
	head = (NODE *)malloc( sizeof(NODE) );  
	head->next = NULL;  
	head->data = -1;  
	
	change( n, m, head );  
	pring = find( head, &n );  
	printf("ring=%d\n", n);  
	outputring( pring );  
	
	return 0;  
}  

/* Here is waiting for you. 
void change( int n, int m, NODE * head ) 
{  
} 

NODE * find( NODE * head, int * n ) 
{ 
} 
*/  